

// 二进制中1的个数
// 链接：https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8
// 来源：牛客网

// 输入一个整数 n ，输出该数32位二进制表示中1的个数。其中负数用补码表示。

// 数据范围：−231<=n<=231−1−231<=n<=231−1
// 即范围为:−2147483648<=n<=2147483647−2147483648<=n<=2147483647
// 示例1
// 输入

// 10

// 输出

// 2

// 说明

// 十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010，其中有两个1。       

// 示例2
// 输入

// -1

// 输出

// 32

// 说明

// 负数使用补码表示 ，-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111，其中32个1 

int NumberOf1(int n ) {
    // write code here
    	if (n > 0)
		return (n % 2 + NumberOf1(n >> 1));
	else if (n < 0)
		return (1 + NumberOf1(n ^ (1 << 31)));
	else
		return 0;
    
}